#include <SPI.h>
#include <Ethernet.h>

// Enter a MAC address, IP address and Portnumber for your Server below.
// The IP address will be dependent on your local network:
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress serverIP(192,168,1,200);
int serverPort = 3128;

int pin2 = 2,
    pin3 = 3,
    pin4 = 4,
    pin5 = 5,
    pin6 = 6,
    pin7 = 7,
    pin8 = 8,
    pin9 = 9,
    pin10 = 10,
    pin11 = 11,
    pin12 = 12,
    pin13 = 13;
    

// Initialize the Ethernet server library
// with the IP address and port you want to use
EthernetServer server(serverPort);

void setup()
{
  // start the serial for debugging
  Serial.begin(9600);
  pinMode(pin2, OUTPUT);
  pinMode(pin3, OUTPUT);
  pinMode(pin4, OUTPUT);
  pinMode(pin5, OUTPUT);
  pinMode(pin6, OUTPUT);
  pinMode(pin7, OUTPUT);
  pinMode(pin8, OUTPUT);
  pinMode(pin9, OUTPUT);
  pinMode(pin10, OUTPUT);
  pinMode(pin11, OUTPUT);
  pinMode(pin12, OUTPUT);
  pinMode(pin13, OUTPUT);
  // start the Ethernet connection and the server:
  Ethernet.begin(mac, serverIP);
  server.begin();
  Serial.println("Server started");//log
}


void loop()
{
  // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {
    String clientMsg ="";
    
    while (client.connected()) {
      if (client.available()) {
        char c = client.read(); 
        clientMsg+=c;
        
        
        
        if (c == '?') {
          
          int spacePosition = clientMsg.indexOf(':');     
          String comando =  clientMsg.substring(0,spacePosition);
          String porta = clientMsg.substring((spacePosition+1),(clientMsg.length()-1));
          
          execultarComandos(comando,porta);
          
          delay(1);
          client.stop();
          
        }else if(c=='$'){
          if(clientMsg.equals("testar-conexao$")){
            client.println("Arduino conectado...");
          }
          delay(1);
          client.stop();
        }
        
        
      }
    }
  }
}

void execultarComandos(String comando, String porta){
    if(comando.equals("on")){
      comandoOn(porta);
    }else if(comando.equals("off")){
      comandoOff(porta); 
    }
}

void comandoOn(String porta){
  if(porta.equals("2")){
    Serial.println("Porta: "+porta+" foi ligada.");
    digitalWrite(pin2, HIGH);
  }else if(porta.equals("3")){
    Serial.println("Porta: "+porta+" foi ligada.");
    digitalWrite(pin3, HIGH);
  }else if(porta.equals("4")){
    Serial.println("Porta: "+porta+" foi ligada.");
    digitalWrite(pin4, HIGH);
  }else if(porta.equals("5")){
    Serial.println("Porta: "+porta+" foi ligada.");
    digitalWrite(pin5, HIGH);
  }else if(porta.equals("6")){
    Serial.println("Porta: "+porta+" foi ligada.");
    digitalWrite(pin6, HIGH);
  }else if(porta.equals("7")){
    Serial.println("Porta: "+porta+" foi ligada.");
    digitalWrite(pin7, HIGH);
  }else if(porta.equals("8")){
    Serial.println("Porta: "+porta+" foi ligada.");
    digitalWrite(pin8, HIGH);
  }else if(porta.equals("9")){
    Serial.println("Porta: "+porta+" foi ligada.");
    digitalWrite(pin9, HIGH);
  }else if(porta.equals("10")){
    Serial.println("Porta: "+porta+" foi ligada.");
    digitalWrite(pin10, HIGH);
  }else if(porta.equals("12")){
    Serial.println("Porta: "+porta+" foi ligada.");
    digitalWrite(pin12, HIGH);
  }else if(porta.equals("13")){
    Serial.println("Porta: "+porta+" foi ligada.");
    digitalWrite(pin13, HIGH);
  } 
  
}


void comandoOff(String porta){
  if(porta.equals("2")){
    Serial.println("Porta: "+porta+" foi desligada.");
    digitalWrite(pin2, LOW);
  }else if(porta.equals("3")){
    Serial.println("Porta: "+porta+" foi desligada.");
    digitalWrite(pin3, LOW);
  }else if(porta.equals("4")){
    Serial.println("Porta: "+porta+" foi desligada.");
    digitalWrite(pin4, LOW);
  }else if(porta.equals("5")){
    Serial.println("Porta: "+porta+" foi desligada.");
    digitalWrite(pin5, LOW);
  }else if(porta.equals("6")){
    Serial.println("Porta: "+porta+" foi desligada.");
    digitalWrite(pin6, LOW);
  }else if(porta.equals("7")){
    Serial.println("Porta: "+porta+" foi desligada.");
    digitalWrite(pin7, LOW);
  }else if(porta.equals("8")){
    Serial.println("Porta: "+porta+" foi desligada.");
    digitalWrite(pin8, LOW);
  }else if(porta.equals("9")){
    Serial.println("Porta: "+porta+" foi desligada.");
    digitalWrite(pin9, LOW);
  }else if(porta.equals("10")){
    Serial.println("Porta: "+porta+" foi desligada.");
    digitalWrite(pin10, LOW);
  }else if(porta.equals("12")){
    Serial.println("Porta: "+porta+" foi desligada.");
    digitalWrite(pin12, LOW);
  }else if(porta.equals("13")){
    Serial.println("Porta: "+porta+" foi desligada.");
    digitalWrite(pin13, LOW);
  }
}


